package com.leetcode;

/**
 * TODO
 *
 * @author lefly
 * @version 1.0
 * @classname No152
 * @description 最大乘积子数组
 * @date 2021/3/2 下午4:59
 */
public class No152 {
    public static void main(String[] args) {
        int[] data = {2,3,-2,4,-2};
        int res = maxProduct(data);
        System.out.println(res);

    }

    // 例子 2 3 -2 4 -2
    //       imax imin max
    // 第一趟 2,2,2
    // 第二趟 6,3,6
    // 第三趟 首先反转 3，6
    //       -2,-12,6
    // 第四趟 4,-48,6
    // 第五趟 首先反转 -48 -4
    //       96,-2,96
    public static int maxProduct(int[] nums){
        int max = Integer.MIN_VALUE,imax = 1,imin = 1;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            int data = nums[i];
            if(data < 0){
                // 最大最小值交换
                int temp = imax;
                imax = imin;
                imin = temp;
            }
            imax = Math.max(imax * data,data);
            imin = Math.min(imin * data,data);
            max = Math.max(max,imax);
        }
        return max;
    }

}
